# 比如查找数组元素的最值、百分位数、方差以及标准差等。
# amin() 沿指定的轴，查找数组中元素的最小值，并以数组形式返回；
# amax() 沿指定的轴，查找数组中元素的最大值，并以数组形式返回。
# ptp() 用于计算数组元素中最值之差值，也就是（最大值 - 最小值）
# percentile() 百分位数，是统计学中使用的一种度量单位。该函数表示沿指定轴，计算数组中任意百分比分位数
# median() 用于计算 a 数组元素的中位数
# mean() 该函数表示沿指定的轴，计算数组中元素的算术平均值
# average()加权平均值是将数组中各数值乘以相应的权数，然后再对权重值求总和，最后以权重的总和除以总的单位数（即因子个数）。
# var() 方差，在统计学中也称样本方差，如何求得方差呢？首先我们要知道全体样本的的平均值，然后再求得每个样本值与均值之差的平方和
# std() 标准差是方差的算术平方根 若一组数据的标准差较大，说明大部分的数值和其平均值之间差异较大；若标准差较小，则代表这组数值比较接近平均值
import numpy as np

a = np.array([[3, 7, 5], [8, 4, 3], [2, 4, 9]])
# amin()函数
print(np.amin(a))  # 2
# 调用 amin() 函数，axis=1
print(np.amin(a, 1))  # [3 3 2] 第一行最小是3，第二行最小是3，第三行最小是2
# 调用amax()函数
print(np.amax(a))  # 9
# 再次调用max()函数
print(np.amax(a, axis=0))  # [8 7 9] 第一列最大是8，第二列最大是7，第三列最大是9

print("沿着axis 1:", np.ptp(a, 1))  # [4 5 7] 第一行差值最大4，第二行最大插值5，第三行最大差值7
print("沿着axis 0:", np.ptp(a, 0))  # [6 3 6] 第一列最大差值6，第二列最大差值3，第三列最大差值6

# a：输入数组；
# q：要计算的百分位数，在 0~100 之间；
# axis：沿着指定的轴计算百分位数。
print("沿着axis=0计算百分位数", np.percentile(a, 10, 0))  # [2.2 4.  3.4]
print("沿着axis=1计算百分位数", np.percentile(a, 10, 1))  # [3.4 3.2 2.4]

print(np.median(a, axis=0))  # [3. 4. 5.]
print((np.median(a, axis=1)))  # [5. 4. 4.]

print(np.mean(a))  # 5.0
print(np.mean(a, axis=0))  # [4.33333333 5.         5.66666667]
print(np.mean(a, axis=1))  # [5. 5. 5.]

a = np.array([1, 2, 3, 4])
print(np.average(a))  # 2.5
# 若不指定权重相当于对数组求均值
we = np.array([4, 3, 2, 1])
# 调用 average() 函数：')
print(np.average(a, weights=we))  # 2.0
# returned 为Ture，则返回权重的和
print(np.average([1, 2, 3, 4], weights=[4, 3, 2, 1], returned=True))  # (2.0, 10.0)

print(np.var([1, 2, 3, 4]))  # 1.25
print(np.std([1, 2, 3, 4]))  # 1.118033988749895
